//: C13:PlacementNew.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
// Placement with operator new
#include <cstddef> // Size_t
#include <iostream>
using namespace std;

class X
{
    int i;
public:
    X(int ii = 0) : i(ii) {}
    ~X() {
        cout << "X::~X()" << endl;
    }
    void* operator new(size_t, void* loc) {
        return loc;
    }
};

int main()
{
    int l[10];
    X* xp = new(l) X(47); // X at location l
    xp->X::~X(); // Explicit destructor call
    // ONLY use with placement!
} ///:~
